import math

# 扩充基础运算函数
def base_mod(a, b):
    """返回 a 除以 b 的余数，若除数为 0 则抛出异常"""
    if b == 0:
        raise ValueError("除数不能为 0")
    return a % b

def base_floor_divide(a, b):
    """返回 a 除以 b 的向下取整的商，若除数为 0 则抛出异常"""
    if b == 0:
        raise ValueError("除数不能为 0")
    return a // b

# 扩充三角函数
def trig_csc(x):
    """返回 x 的余割值，x 为弧度制，若 sin(x) 为 0 则抛出异常"""
    sin_value = math.sin(x)
    if sin_value == 0:
        raise ValueError("余割函数中 sin(x) 不能为 0")
    return 1 / sin_value

def trig_sec(x):
    """返回 x 的正割值，x 为弧度制，若 cos(x) 为 0 则抛出异常"""
    cos_value = math.cos(x)
    if cos_value == 0:
        raise ValueError("正割函数中 cos(x) 不能为 0")
    return 1 / cos_value

def trig_cot(x):
    """返回 x 的余切值，x 为弧度制，若 tan(x) 为 0 则抛出异常"""
    tan_value = math.tan(x)
    if tan_value == 0:
        raise ValueError("余切函数中 tan(x) 不能为 0")
    return 1 / tan_value

# 扩充高等数学函数
def adv_log10(x):
    """返回 x 的以 10 为底的对数，x 必须大于 0"""
    if x > 0:
        return math.log10(x)
    else:
        raise ValueError("输入值必须大于 0")

def adv_log2(x):
    """返回 x 的以 2 为底的对数，x 必须大于 0"""
    if x > 0:
        return math.log2(x)
    else:
        raise ValueError("输入值必须大于 0")

def adv_factorial(x):
    """返回 x 的阶乘，x 必须为非负整数"""
    if x < 0 or not isinstance(x, int):
        raise ValueError("输入值必须为非负整数")
    return math.factorial(x)

# 基本运算函数
def base_add(a, b):
    """返回两个数的和"""
    return a + b

def base_subtract(a, b):
    """返回两个数的差"""
    return a - b

def base_multiply(a, b):
    """返回两个数的积"""
    return a * b

def base_divide(a, b):
    """返回两个数的商，若除数为 0 则抛出异常"""
    if b == 0:
        raise ValueError("除数不能为 0")
    return a / b

# 三角运算函数
def trig_sin(x):
    """返回 x 的正弦值，x 为弧度制"""
    return math.sin(x)

def trig_cos(x):
    """返回 x 的余弦值，x 为弧度制"""
    return math.cos(x)

def trig_tan(x):
    """返回 x 的正切值，x 为弧度制"""
    return math.tan(x)

def trig_asin(x):
    """返回 x 的反正弦值，结果为弧度制"""
    if -1 <= x <= 1:
        return math.asin(x)
    else:
        raise ValueError("输入值必须在 -1 到 1 之间")

def trig_acos(x):
    """返回 x 的反余弦值，结果为弧度制"""
    if -1 <= x <= 1:
        return math.acos(x)
    else:
        raise ValueError("输入值必须在 -1 到 1 之间")

def trig_atan(x):
    """返回 x 的反正切值，结果为弧度制"""
    return math.atan(x)

# 高等数学函数
def adv_exp(x):
    """返回 e 的 x 次幂"""
    return math.exp(x)

def adv_log(x, base=None):
    """返回 x 的对数，若未指定底数则为自然对数"""
    if base is None:
        return math.log(x)
    else:
        return math.log(x, base)

def adv_pow(x, y):
    """返回 x 的 y 次幂"""
    return math.pow(x, y)

def adv_sqrt(x):
    """返回 x 的平方根，x 必须非负"""
    if x >= 0:
        return math.sqrt(x)
    else:
        raise ValueError("输入值必须非负")
